/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package simulateurs.model.monde;

import java.awt.Color;
import java.util.ArrayList;

/**
 *
 * @author Jah
 */
public class Cercle {
    private Point centre=null;
    private double rayon;
	private boolean tailleAbsolue;
	private Color couleur=null;
	
        // constructeur par defaut pour parser java et Robot, utile ?
        public Cercle(){
	}
        
        // pour l'appel de detecter collisions
        public Cercle(Point centre, double diametre){
		this.centre=centre;
		this.rayon=diametre/2;
		this.tailleAbsolue=true;
	}
        
        
	public Cercle(Point centre, Color couleur){
		this.tailleAbsolue=false;
		this.centre=centre;
		this.couleur=couleur;
                this.rayon=10.0; // rayon par defaut // si taille 8, pb affichage
	}
    
	public Cercle(Point centre, Color couleur, double diametre){
		this.centre=centre;
		this.rayon=diametre/2;
		this.tailleAbsolue=true;
		this.couleur=couleur;
	}
        
        public Cercle(Color couleur, double diametre){
		this.rayon=diametre/2;
		this.tailleAbsolue=true;
		this.couleur=couleur;
	}
	
	public Point getCentre() {
		return centre;
	}

	public double getRayon() {
		return rayon;
	}

	public boolean isTailleAbsolue() {
		return tailleAbsolue;
	}

	public Color getCouleur() {
		return couleur;
	}

	public void setCentre(Point centre) {
		this.centre = centre;
	}

	public void setRayon(double rayon) {
		this.rayon = rayon;
	}

	public void setCouleur(Color couleur) {
		this.couleur = couleur;
	}
        
        
        public static Point detecterCollision(ArrayList<Equipe> equipeList,ArrayList<Balle> balleList, ArrayList<But> butList ,Cercle prochainCercle, Cercle robotActuel){
            
            double distanceDeuxCentres;
            Point valRetour=null;
            
            //il faut parcourir la liste des equipe et robot puis la liste des balles
            
            //System.out.println("Dans detecter collision, emplacement de l'objet : " + robotActuel.getCentre().getAbscisse() + "," + robotActuel.getCentre().getOrdonnee());
            
            for (int i = 0;i<equipeList.size();i++){
                for(int j=0;j<equipeList.get(i).getListeRobots().size();j++){
                    
                    // il faut ignorer le robot actuel
                    if(!((equipeList.get(i).getListeRobots().get(j).getCentre().getAbscisse() == robotActuel.getCentre().getAbscisse()) && (equipeList.get(i).getListeRobots().get(j).getCentre().getOrdonnee() == robotActuel.getCentre().getOrdonnee())))
                    {
                    // devrait etre bon
                    
                   // System.out.println("\n-----> Le robot sera a : (" + prochainCercle.getCentre().getAbscisse() + "," + prochainCercle.getCentre().getOrdonnee() + ")");
                   // System.out.println("-----> Compare avec celui a : (" + equipeList.get(i).getListeRobots().get(j).getCentre().getAbscisse() + "," + equipeList.get(i).getListeRobots().get(j).getCentre().getOrdonnee() + ")");

                    distanceDeuxCentres=Math.sqrt(Math.pow(equipeList.get(i).getListeRobots().get(j).getCentre().getAbscisse()-prochainCercle.getCentre().getAbscisse(), 2) + Math.pow(equipeList.get(i).getListeRobots().get(j).getCentre().getOrdonnee()-prochainCercle.getCentre().getOrdonnee(), 2));
                    if(distanceDeuxCentres < prochainCercle.getRayon() + equipeList.get(i).getListeRobots().get(j).getRayon()){
                        valRetour=new Point(equipeList.get(i).getListeRobots().get(j).getCentre().getAbscisse(),equipeList.get(i).getListeRobots().get(j).getCentre().getOrdonnee());
                        //valRetour = true;
                     // System.out.println("---Collision avec un robot");
                        //System.out.println("C'est un robot !!!");
                    }
                    
                    }
                    else{
                        // on ne fait rien!
                    }
                    
                }
            }
            
            // parcours des balles, si leur attribut est ramassable !!!!
            for(int k=0;k<balleList.size();k++){
                if(!((balleList.get(k).getCentre().getAbscisse() == robotActuel.getCentre().getAbscisse()) && (balleList.get(k).getCentre().getOrdonnee() == robotActuel.getCentre().getOrdonnee())))
                    {
                if(balleList.get(k).isRamassable()){
                    distanceDeuxCentres=Math.sqrt((Math.pow(balleList.get(k).getCentre().getAbscisse()-prochainCercle.getCentre().getAbscisse(), 2)) + Math.pow(balleList.get(k).getCentre().getOrdonnee()-prochainCercle.getCentre().getOrdonnee(), 2));
                   // System.out.println("La distance deux centres est  : "+distanceDeuxCentres + "et la somme des rayon est : " +prochainCercle.getRayon() + balleList.get(k).getRayon());
                    // System.out.println("Le rayon prochainCercle : "+prochainCercle.getRayon());
                    //System.out.println("Le rayon balleList.get(k) : "+balleList.get(k).getRayon());
                    if(distanceDeuxCentres < prochainCercle.getRayon() + balleList.get(k).getRayon()){
                        //System.out.println("---Collision avec une balle");
                        valRetour = new Point(balleList.get(k).getCentre().getAbscisse(),balleList.get(k).getCentre().getOrdonnee());
                    //System.out.println("C'est une balle !!!");
                    
                    }
                }
                    }
                else
                {
                    // ne fait rien
                }
                    
            }
            
            
            // parcours des buts
            for(int l=0;l<butList.size();l++){
                
                    distanceDeuxCentres=Math.sqrt((Math.pow(butList.get(l).getCentre().getAbscisse()-prochainCercle.getCentre().getAbscisse(), 2)) + Math.pow(butList.get(l).getCentre().getOrdonnee()-prochainCercle.getCentre().getOrdonnee(), 2));
                    if(distanceDeuxCentres < prochainCercle.getRayon() + butList.get(l).getRayon()){
                        //System.out.println("---Collision avec une balle");
                        valRetour = new Point(butList.get(l).getCentre().getAbscisse(),butList.get(l).getCentre().getOrdonnee());
                   // System.out.println("C'est un but");
                    
                    }
                
                else
                {
                    // ne fait rien
                }
                    
            }
            
            
            return valRetour;
        }
        

}
